package com.okb.dto;

/**
 * Description: 订单类
 * Author: hcxu
 * Time: 2024/11/22 1:41 PM
 */
import lombok.Data;
import java.util.List;

/**
 * 交易订单请求实体类
 */
@Data
public class OrderRequestDto {

    /** 产品ID，如 BTC-USDT */
    private String instId;

    /** 交易模式 */
    private String tdMode;

    /** 保证金模式：isolated：逐仓；cross：全仓；非保证金模式：cash：非保证金 */
    private String ccy;

    /** 客户自定义订单ID，字母（区分大小写）与数字的组合 */
    private String clOrdId;

    /** 订单标签，字母（区分大小写）与数字的组合 */
    private String tag;

    /** 订单方向：buy（买），sell（卖） */
    private String side;

    /** 持仓方向，在开平仓模式下必填，且仅可选择long或short，仅适用交割、永续 */
    private String posSide;

    /** 订单类型：market（市价单）、limit（限价单）、post_only（只做maker单）等 */
    private String ordType;

    /** 委托数量 */
    private String sz;

    /** 委托价格，仅适用于limit、post_only、fok、ioc、mmp、mmp_and_post_only类型的订单 */
    private String px;

    /** 以USD价格进行期权下单，仅适用于期权 */
    private String pxUsd;

    /** 以隐含波动率进行期权下单，仅适用于期权 */
    private String pxVol;

    /** 是否只减仓，true 或 false，默认false */
    private Boolean reduceOnly;

    /** 市价单委托数量sz的单位，仅适用于币币市价订单 */
    private String tgtCcy;

    /** 是否禁止币币市价改单，true 或 false，默认false */
    private Boolean banAmend;

    /** 一键借币类型，仅适用于杠杆逐仓的一键借币模式：manual（手动），auto_borrow（自动借币），auto_repay（自动还币） */
    private String quickMgnType;

    /** 自成交保护ID */
    private String stpId;

    /** 自成交保护模式，默认为cancel maker */
    private String stpMode;

    /** 下单附带止盈止损信息 */
    private List<AttachAlgoOrder> attachAlgoOrds;

    /**
     * 下单附带止盈止损信息的实体类
     */
    @Data
    public static class AttachAlgoOrder {

        /** 下单附带止盈止损时，客户自定义的策略订单ID */
        private String attachAlgoClOrdId;

        /** 止盈触发价 */
        private String tpTriggerPx;

        /** 止盈委托价 */
        private String tpOrdPx;

        /** 止盈订单类型：condition（条件单），limit（限价单），默认为condition */
        private String tpOrdKind;

        /** 止损触发价 */
        private String slTriggerPx;

        /** 止损委托价 */
        private String slOrdPx;

        /** 止盈触发价类型：last（最新价格），index（指数价格），mark（标记价格），默认为last */
        private String tpTriggerPxType;

        /** 止损触发价类型：last（最新价格），index（指数价格），mark（标记价格），默认为last */
        private String slTriggerPxType;

        /** 数量，仅适用于“多笔止盈”的止盈订单 */
        private String sz;

        /** 是否启用开仓价止损，仅适用于分批止盈的止损订单 */
        private String amendPxOnTriggerType;
    }
}

